package com.xiaolin.designmode.factory.simple;

import com.xiaolin.designmode.factory.bean.HuaweiPhone;
import com.xiaolin.designmode.factory.bean.Phone;
import com.xiaolin.designmode.factory.bean.XiaomiPhone;

/**
 * @ClassName SimpleFactory
 * @Description 简单工厂模式-手机工厂
 * @Detail 步骤：
 *              1、创建一个产品类型接口（或抽象类）
 *              2、创建具体产品类去实现产品接口（或抽象类）
 *              3、创建一个工厂类去生产具体产品
 *                  1、提供静态工厂方法，根据类型去创建具体产品
 *              4、测试
 *          总结：
 *              1、客户端与工厂直接关联，如果需要扩展类型，只需要修改工厂的代码即可，无需修改客户端代码
 *              2、角色：
 *                 1、一个产品接口或抽象类
 *                 2、若干个具体产品类
 *                 3、一个生产具体产品的工厂
 *                      1、一个静态工厂方法（根据类型创建不同实例）或者是多个静态工厂方法，每个方法创建一种不同的实例
 *                 4、一个客户端
 *              3、适用场景
 *                  1、只有一层分类（只有一个工厂，工厂下面生产同类型的不同产品，如手机），用户知道可以生产哪种产品，如华为手机、小米手机
 *           缺点：
 *              1、简单工厂模式每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类，这增加了系统的复杂度，违背了“开闭原则”
 *           说明：
 *              1、简单工厂模式不属于23种设计模式
 * @Author MyPC
 * @Date 2020/7/18
 * @Version 1.0
 */
public class SimpleFactory {
    /**
     * 静态工厂方法
     * 生产手机，需要传入一个手机类型
     * @param phoneType
     * @return
     */
    public static Phone makePhone(String phoneType){
        if(phoneType.equals("xiaomi")){
            return new XiaomiPhone();
        }else if(phoneType.equals("huawei")){
            return new HuaweiPhone();
        }
        //指定类型不匹配，则返回null
        return null;
    }
}
